/**
 * @file device_listener.h
 * @brief 设备监听器接口
 * @details 根据产品名提取协议类型，监听设备数据，组装后上报到IoT平台
 */

#ifndef DEVICE_LISTENER_H
#define DEVICE_LISTENER_H

#include <stdint.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief 设备监听器句柄
 */
typedef void* device_listener_handle_t;

/**
 * @brief 从产品名中提取协议类型
 * @details 例如："104_设备" -> 104, "3761_设备" -> 3761
 * 
 * @param product_name 产品名
 * @return 协议类型：104, 3761, 3762, 或其他数字，失败返回-1
 */
int extract_protocol_type_from_product_name(const char* product_name);

/**
 * @brief 创建设备监听器
 * @details 根据协议类型启动对应的协议监听，接收设备数据并上报到IoT平台
 * 
 * @param protocol_type 协议类型（从产品名中提取）
 * @param product_key 产品Key
 * @param device_name 设备名称
 * @param iot_platform_handle IoT平台客户端句柄
 * @return 监听器句柄，失败返回NULL
 */
device_listener_handle_t device_listener_create(int protocol_type,
                                                const char* product_key,
                                                const char* device_name,
                                                void* iot_platform_handle);

/**
 * @brief 销毁设备监听器
 * @param handle 监听器句柄
 */
void device_listener_destroy(device_listener_handle_t handle);

/**
 * @brief 启动监听
 * @param handle 监听器句柄
 * @return 0表示成功，-1表示失败
 */
int device_listener_start(device_listener_handle_t handle);

/**
 * @brief 停止监听
 * @param handle 监听器句柄
 * @return 0表示成功，-1表示失败
 */
int device_listener_stop(device_listener_handle_t handle);

#ifdef __cplusplus
}
#endif

#endif /* DEVICE_LISTENER_H */
